package map;

import java.util.HashMap;
import java.util.Map;

/**
 * Map 查找表
 * Map体现的样子是一个多行两列的表格
 * 左列称为key,右列称为value
 * Map总是以key-value成对保存数据
 * Map要求key不允许重复(equals比较)
 * Map总是根据key获取对应的value
 *
 * java.util.Map是一个接口
 * 常见的实现类:
 * java.util.HashMap:散列表，使用散列算法实现的Map
 * java.util.TreeMap:使用二叉树实现的Map
 */
public class MapDemo1 {
    public static void main(String[] args) {
        Map<String,Integer> map = new HashMap<>();
        /*
            V put(K k,V v)
            向Map中添加一组键值对
            因为Map要求key不允许重复，所以如果使用重复的key存入value时则是
            替换value操作，被替换的value会通过put方法的返回值返回。
            如果时第一次存入，则返回值为null
         */
        Integer value = map.put("语文",99);//此一次存入"语文"这个key
        System.out.println(value);//返回值为null
        map.put("数学",98);
        map.put("英语",97);
        map.put("物理",96);
        map.put("化学",99);
        System.out.println(map);

        value = map.put("物理",50);//第二次存入key"物理"会替换对应的value
        System.out.println(map);
        System.out.println(value);//"物理"原来对应的值:96

        /*
            V get(Object key)
            根据给定的key提取对应的value
            如果给定的key不存在则返回null
         */
        value = map.get("语文");
        System.out.println(value);
        value = map.get("体育");
        System.out.println(value);
        /*
            int size()
            返回当前Map的元素个数，每组键值对为一个元素
         */
        int size = map.size();
        System.out.println("size:"+size);
        /*
            V remove(Object obj)
            删除给定的key对应的键值对，返回值为则个key对应的value
         */
        value = map.remove("数学");
        System.out.println(map);
        System.out.println(value);
        //判断是否为空map
        boolean isEmpty = map.isEmpty();
        System.out.println("isEmpty:"+isEmpty);
        //判断Map是否包含指定的key或value
        boolean ck = map.containsKey("数学");
        System.out.println("包含key:"+ck);
        boolean cv = map.containsValue(99);
        System.out.println("包含value:"+cv);
        //清空Map
        map.clear();
        System.out.println(map);

    }
}




